package main

import (
	"context"
	"fmt"
	"sync"
	"time"
)

var wg sync.WaitGroup
//var stop chan bool = make(chan bool)


func cpuinfo(ctx context.Context)  {
	defer wg.Done()
	//ctx2,_:=context.WithCancel(ctx) //这里不用 cancel是因为之后用不到，故用下划线代替
	//go memoryinfo(ctx2)
	for{
		select {
		case <-ctx.Done():
			fmt.Println("退出cpu监控")
			return
		default:
			time.Sleep(time.Second*2)
			fmt.Println("cpu信息读取完成")
		}
	}
}
func memoryinfo(ctx context.Context)  {
	defer wg.Done()
	for{
		select {
		case <-ctx.Done():
			fmt.Println("退出cpu监控")
			return
		default:
			time.Sleep(time.Second*2)
			fmt.Println("cpu信息读取完成")
		}
	}
}
func main() {
	//启动一个go协程去监控某台服务器的cpu情况
	wg.Add(1)
	//根据父context对象（context.Background()）生成子的context对象
	var ctx,_ = context.WithTimeout(context.Background(),3*time.Second)
	go cpuinfo(ctx)
	//time.Sleep(time.Second*6)
	//cancel() //6秒后告诉子协程可以取消了
	//希望可以中断cpu信息读取
	wg.Wait()
	fmt.Println("信息监控完成")
}
